///*
// * 指针和引用参考
// * 左值：能够获得某个不可移动对象的值或标识的表达式。如 i ，*p
// * 右值：只能获取值，不能获取标识的表达式。如1，a+b
// * 左值可以位于位于赋值语句的左边，但右值不能，右值只能位于右边，不能位于左边
// * https://blog.csdn.net/weixin_48560325/article/details/122643221

// * 指针、引用:
// https://www.cnblogs.com/beixiaobei/p/10446463.html
// * */
//#include <iostream>
////常量引用:常用来修饰形参,防止实传递后修改参数
//void changeValue(const int &num) {
//    //防止修改实参
//    //num=10;
//    int va = num - 10;
//}
//
////返回局部变量引用
//int &retTest1() {
//    int zy = 100;
//    return zy;
//}
//
////返回静态变量引用
//int &retTest2() {
//    static int sz = 200;
//    return sz;
//}
//
////引用
//using namespace std;
//
//int main() {
//    int a = 10;
//    int num = 60;
//    int &refb = a;
//    int refc = a;
//    cout << "a:" << a << endl;
//    cout << "refb:" << refb << endl;
//    cout << "refc:" << refc << endl;
//
//    refb = 1000;
//    refc = 2000;
//    cout << "a:" << a << endl;
//    cout << "refb:" << refb << endl;
//    cout << "&refb:" << &refb << endl;
//    cout << "refc:" << refc << endl;
//
//    refb = num;
//    cout << "a:" << a << endl;
//    cout << "refb:" << refb << endl;
//
//
//    /*常量引用
//     *
//     * 常量引用就是对const的引用的简称，它会把它所指向的对象作为常量，所以不可以通过该引用来修改它所指向的对象的值。
//     * 1.指向常量对象时，必须要使用常量引用，而不能使用一般引用。
//     * 2.常量引用可以指向一个非常量引用，但不允许用常量引用修改非常量对象的值。
//     * 3.常量引用是非常特殊的程序对象，所绑定初始式既可以是左值，又可以是右值。如果初始式是右值，
//     * 首先会将右值进行隐式类型的转换，并将结果存入到一个的临时变量中，然后会将此临时变量作为初始式。
//     *
//     * */
//    const int k1=300;
//
//    //int& k1ref=k1; 验证1：非法，指向常量的只能是常量引用
//    const int& k1ref=k1;
//    // 验证2：常量引用可以指向非常量引用,但是不能改变这个值
//    const int& k2ref=refb;
//    //k2ref=110;
//
//    //局部变量的引用不能返回
////    int &refzy = retTest1();
////    cout << "refzy:" << refzy << endl;
//    int &refsz = retTest2();
//    cout << "refsz:" << refsz << endl;
//
//    int b = 20;
//    //限定的就是值,常量值是不能修改;所以禁止s赋给任何引用，防止赋的引用能够修改s的值
//    const int *s = &b;
//    //以下是错误的
//    // int* p1=*s;
//    int p1 = *s;
//    cout << "p1:" << p1 << endl;
//
//    int c = 30;
//    //限定的就是地址,地址是不能修改;所以禁止任何引用赋值给e,只能将值赋给e,引用==指针常量,所以下面的是合法的
//    int *const e = &c;
//    //以下是错误的
//    //e=refb;
//    *e = 300;
//    int *const q = e;
//    return 0;
//}
